#!/usr/bin/python
# -*- coding: utf-8 -*-

從 zwds.core 導入 *

"""
術數曆法 花甲
"""
類別 花甲(物件):
    """
    子丑, 寅卯, 辰巳 ... 類推
    """
    定義 __初始化__(我, 名稱, 天干, 地支, 五行局):
        我.名稱 = 名稱
        我.五行局 = 五行局
        我.天干 = 天干
        我.地支 = 地支
        我.陰陽 = 天干.陰陽

    定義 __字串__(我):
        返回 我.名稱

甲子 = 花甲(名稱 = '甲子', 天干 = 甲, 地支 = 子, 五行局 = 金)
乙丑 = 花甲(名稱 = '乙丑', 天干 = 乙, 地支 = 丑, 五行局 = 金)
丙寅 = 花甲(名稱 = '丙寅', 天干 = 丙, 地支 = 寅, 五行局 = 火)
丁卯 = 花甲(名稱 = '丁卯', 天干 = 丁, 地支 = 卯, 五行局 = 火)
戊辰 = 花甲(名稱 = '戊辰', 天干 = 戊, 地支 = 辰, 五行局 = 木)
己巳 = 花甲(名稱 = '己巳', 天干 = 己, 地支 = 巳, 五行局 = 木)
庚午 = 花甲(名稱 = '庚午', 天干 = 庚, 地支 = 午, 五行局 = 土)
辛未 = 花甲(名稱 = '辛未', 天干 = 辛, 地支 = 未, 五行局 = 土)
壬申 = 花甲(名稱 = '壬申', 天干 = 壬, 地支 = 申, 五行局 = 金)
癸酉 = 花甲(名稱 = '癸酉', 天干 = 癸, 地支 = 酉, 五行局 = 金)
甲戌 = 花甲(名稱 = '甲戌', 天干 = 甲, 地支 = 戌, 五行局 = 火)
乙亥 = 花甲(名稱 = '乙亥', 天干 = 乙, 地支 = 亥, 五行局 = 火)

丙子 = 花甲(名稱 = '丙子', 天干 = 丙, 地支 = 子, 五行局 = 水)
丁丑 = 花甲(名稱 = '丁丑', 天干 = 丁, 地支 = 丑, 五行局 = 水)
戊寅 = 花甲(名稱 = '戊寅', 天干 = 戊, 地支 = 寅, 五行局 = 土)
己卯 = 花甲(名稱 = '己卯', 天干 = 己, 地支 = 卯, 五行局 = 土)
庚辰 = 花甲(名稱 = '庚辰', 天干 = 庚, 地支 = 辰, 五行局 = 金)
辛巳 = 花甲(名稱 = '辛巳', 天干 = 辛, 地支 = 巳, 五行局 = 金)
壬午 = 花甲(名稱 = '壬午', 天干 = 壬, 地支 = 午, 五行局 = 木)
癸未 = 花甲(名稱 = '癸未', 天干 = 癸, 地支 = 未, 五行局 = 木)
甲申 = 花甲(名稱 = '甲申', 天干 = 甲, 地支 = 申, 五行局 = 水)
乙酉 = 花甲(名稱 = '乙酉', 天干 = 乙, 地支 = 酉, 五行局 = 水)
丙戌 = 花甲(名稱 = '丙戌', 天干 = 丙, 地支 = 戌, 五行局 = 土)
丁亥 = 花甲(名稱 = '丁亥', 天干 = 丁, 地支 = 亥, 五行局 = 土)

戊子 = 花甲(名稱 = '戊子', 天干 = 戊, 地支 = 子, 五行局 = 火)
己丑 = 花甲(名稱 = '己丑', 天干 = 己, 地支 = 丑, 五行局 = 火)
庚寅 = 花甲(名稱 = '庚寅', 天干 = 庚, 地支 = 寅, 五行局 = 木)
辛卯 = 花甲(名稱 = '辛卯', 天干 = 辛, 地支 = 卯, 五行局 = 木)
壬辰 = 花甲(名稱 = '壬辰', 天干 = 壬, 地支 = 辰, 五行局 = 水)
癸巳 = 花甲(名稱 = '癸巳', 天干 = 癸, 地支 = 巳, 五行局 = 水)
甲午 = 花甲(名稱 = '甲午', 天干 = 甲, 地支 = 午, 五行局 = 金)
乙未 = 花甲(名稱 = '乙未', 天干 = 乙, 地支 = 未, 五行局 = 金)
丙申 = 花甲(名稱 = '丙申', 天干 = 丙, 地支 = 申, 五行局 = 火)
丁酉 = 花甲(名稱 = '丁酉', 天干 = 丁, 地支 = 酉, 五行局 = 火)
戊戌 = 花甲(名稱 = '戊戌', 天干 = 戊, 地支 = 戌, 五行局 = 木)
己亥 = 花甲(名稱 = '己亥', 天干 = 己, 地支 = 亥, 五行局 = 木)

庚子 = 花甲(名稱 = '庚子', 天干 = 庚, 地支 = 子, 五行局 = 土)
辛丑 = 花甲(名稱 = '辛丑', 天干 = 辛, 地支 = 丑, 五行局 = 土)
壬寅 = 花甲(名稱 = '壬寅', 天干 = 壬, 地支 = 寅, 五行局 = 金)
癸卯 = 花甲(名稱 = '癸卯', 天干 = 癸, 地支 = 卯, 五行局 = 金)
甲辰 = 花甲(名稱 = '甲辰', 天干 = 甲, 地支 = 辰, 五行局 = 火)
乙巳 = 花甲(名稱 = '乙巳', 天干 = 乙, 地支 = 巳, 五行局 = 火)
丙午 = 花甲(名稱 = '丙午', 天干 = 丙, 地支 = 午, 五行局 = 水)
丁未 = 花甲(名稱 = '丁未', 天干 = 丁, 地支 = 未, 五行局 = 水)
戊申 = 花甲(名稱 = '戊申', 天干 = 戊, 地支 = 申, 五行局 = 土)
己酉 = 花甲(名稱 = '己酉', 天干 = 己, 地支 = 酉, 五行局 = 土)
庚戌 = 花甲(名稱 = '庚戌', 天干 = 庚, 地支 = 戌, 五行局 = 金)
辛亥 = 花甲(名稱 = '辛亥', 天干 = 辛, 地支 = 亥, 五行局 = 金)

壬子 = 花甲(名稱 = '壬子', 天干 = 壬, 地支 = 子, 五行局 = 木)
癸丑 = 花甲(名稱 = '癸丑', 天干 = 癸, 地支 = 丑, 五行局 = 木)
甲寅 = 花甲(名稱 = '甲寅', 天干 = 甲, 地支 = 寅, 五行局 = 水)
乙卯 = 花甲(名稱 = '乙卯', 天干 = 乙, 地支 = 卯, 五行局 = 水)
丙辰 = 花甲(名稱 = '丙辰', 天干 = 丙, 地支 = 辰, 五行局 = 土)
丁巳 = 花甲(名稱 = '丁巳', 天干 = 丁, 地支 = 巳, 五行局 = 土)
戊午 = 花甲(名稱 = '戊午', 天干 = 戊, 地支 = 午, 五行局 = 火)
己未 = 花甲(名稱 = '己未', 天干 = 己, 地支 = 未, 五行局 = 火)
庚申 = 花甲(名稱 = '庚申', 天干 = 庚, 地支 = 申, 五行局 = 木)
辛酉 = 花甲(名稱 = '辛酉', 天干 = 辛, 地支 = 酉, 五行局 = 木)
壬戌 = 花甲(名稱 = '壬戌', 天干 = 壬, 地支 = 戌, 五行局 = 水)
癸亥 = 花甲(名稱 = '癸亥', 天干 = 癸, 地支 = 亥, 五行局 = 水)

花甲表 = (甲子, 乙丑, 丙寅, 丁卯, 戊辰, 己巳, 庚午, 辛未, 壬申, 癸酉, 甲戌, 乙亥,
丙子, 丁丑, 戊寅, 己卯, 庚辰, 辛巳, 壬午, 癸未, 甲申, 乙酉, 丙戌, 丁亥,
戊子, 己丑, 庚寅, 辛卯, 壬辰, 癸巳, 甲午, 乙未, 丙申, 丁酉, 戊戌, 己亥,
庚子, 辛丑, 壬寅, 癸卯, 甲辰, 乙巳, 丙午, 丁未, 戊申, 己酉, 庚戌, 辛亥,
壬子, 癸丑, 甲寅, 乙卯, 丙辰, 丁巳, 戊午, 己未, 庚申, 辛酉, 壬戌, 癸亥
)

# not being used yet
類別 節氣(物件):
    """
    http://www.componentcn.com/show_new.asp?id=397
    """
    定義 __初始化__(我, 名稱):
        我.名稱 = 名稱

    定義 __字串__(我):
        返回 我.名稱

小寒 = 節氣("小寒")
大寒 = 節氣("大寒")
立春 = 節氣("立春")
雨水 = 節氣("雨水")
驚蟄 = 節氣("驚蟄")
春分 = 節氣("春分")
清明 = 節氣("清明")
穀雨 = 節氣("穀雨")
立夏 = 節氣("立夏")
小滿 = 節氣("小滿")
芒種 = 節氣("芒種")
夏至 = 節氣("夏至")
小暑 = 節氣("小暑")
大暑 = 節氣("大暑")
立秋 = 節氣("立秋")
處暑 = 節氣("處暑")
白露 = 節氣("白露")
秋分 = 節氣("秋分")
寒露 = 節氣("寒露")
霜降 = 節氣("霜降")
立冬 = 節氣("立冬")
小雪 = 節氣("小雪")
大雪 = 節氣("大雪")
冬至 = 節氣("冬至")

節氣表 = (小寒, 大寒, 立春, 雨水,
        驚蟄, 春分, 清明, 穀雨,
        立夏, 小滿, 芒種, 夏至,
        小暑, 大暑, 立秋, 處暑,
        白露, 秋分, 寒露, 霜降,
        立冬, 小雪, 大雪, 冬至)

類別 農曆(物件):
    """
    use pyzh calendar
    http://www.hsip.cn/article/12/2005/200512162906.html
    http://www.evget.com/zh-CN/article/1694/default.aspx
    http://www.evget.com/zh-CN/article/1695/default.aspx
    
    chinese-lunar-calendar looks good
    http://code.google.com/p/chinese-lunar-calendar/source/browse/trunk/date.py
    
    lunar date
    http://code.google.com/p/python-lunardate/source/browse/trunk/lunardate.py
    
    lunarcalendar2
    http://code.google.com/p/lunarcalendar2/source/browse/trunk/LunarCalendar/src/com/anchorman/lunarcalendar/util/LunarCalendarUtils.java
    """
    定義 __初始化__(我):
        from lunarcalendar import LunarCalendar
        我._農曆 = LunarCalendar()

    定義 西元生辰(我, 生年, 生月, 生日, 生時):
        我.生年 = 生年
        我.生月 = 生月
        我.生日 = 生日
        我.生時 = 生時
        我.農曆生年, 我.農曆生月, 我.農曆生日, 我.閏月 = 我._農曆.getLunarDate(我.生年, 我.生月, 我.生日)
        我.農曆生辰 = 我.__農曆生辰()

    定義 __農曆生辰(我):
        """干支, 月, 日, 時, 閏"""
        早子時 = 假
        如果 我.生時 < 1:
           時辰 = 子
           早子時 = 真
        假使 我.生時 < 3:
           時辰 = 丑
        假使 我.生時 < 5:
           時辰 = 寅
        假使 我.生時 < 7:
           時辰 = 卯
        假使 我.生時 < 9:
           時辰 = 辰
        假使 我.生時 < 11:
           時辰 = 巳
        假使 我.生時 < 13:
           時辰 = 午
        假使 我.生時 < 15:
           時辰 = 未
        假使 我.生時 < 17:
           時辰 = 申
        假使 我.生時 < 19:
           時辰 = 酉
        假使 我.生時 < 21:
           時辰 = 戌
        否則:
           時辰 = 亥
        返回 時辰, 早子時
